package 力扣;

import java.util.Arrays;
//给定一个包括 n 个整数的数组 nums 和 一个目标值 target。
// 找出 nums 中的三个整数，使得它们的和与 target 最接近。返回这三个数的和。
// 假定每组输入只存在唯一答案。

public class 最接近的三数之和 {
    public static void main(String[] args) {
       int[] nums = {-1,2,1,-4};
        int closest = threeSumClosest(nums, 1);
        System.out.println(closest);
    }
    public static int threeSumClosest(int[] nums, int target) {
        int sum=nums[0]+nums[1]+nums[2];
        int min=Math.abs(sum-target);
        Arrays.sort(nums); // 排序
        int len=nums.length;
        for (int i = 0; i < nums.length ; i++) {
            int L = i+1;
            int R = len-1;
            while(L < R){
                int arrsum = nums[i] + nums[L] + nums[R];
                int arrmin=Math.abs(arrsum-target);
                if(arrmin<min){
                    min=arrmin;
                    sum=arrsum;

                }
                if (arrsum>target){
                    R--;
                }
                else{
                    L++;
                }
            }
        }
        return sum;
    }
    }

